package com.example.helloworld.config;

import com.example.helloworld.MyLocalResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import service.PersonService;
import service.impl.PersonServiceImpl;

/**
 * @author 张岩
 * @date 2022/3/19 10:01
 */
/**
 * @Configuration 注解用于定义一个配置类，相当于 Spring 的配置文件
 * 配置类中包含一个或多个被 @Bean 注解的方法，该方法相当于 Spring 配置文件中的 <bean> 标签定义的组件。
 *
 * 以下为注解 @Configuration 的扩展注解，用于指定 Bean 在特定条件下生效
 * 该注解可用于方法上
 *  @ConditionOnJava			--- 使用指定Java版本时生效
 *  @ConditionOnBean			--- 容器中存在指定Bean时生效
 *  @ConditionOnMissingBean		--- 容器中不存在指定的Bean时生效
 *  @ConditionOnExpression		--- 满足指定的SpEL表达式时生效
 *  @ConditionOnClass			--- 存在指定的类时生效
 *  @ConditionOnMissingClass	--- 不存在指定的类时生效
 *  @ConditionOnSingleCandidate	--- 容器中只存在一个指定的Bean或者这个Bean为首选Bean时生效
 *  @ConditionOnProperty		--- 系统中指定属性存在指定的值时生效
 *  @ConditionOnResource		--- 类路径下存在指定的资源文件时生效
 *  @ConditionOnWebApplication	--- 当前应用是Web应用时生效
 *  @ConditionOnNotWebApplication - 当前应用不是Web应用时生效
 */
@Configuration
public class MyAppConfig {

	/**
	 * 与 <bean id="personService" class="PersonServiceImpl"></bean> 等价
	 * 该方法返回值以组件的形式添加到容器中
	 * 方法名是组件 id（相当于 <bean> 标签的属性 id)
	 */
	@Bean
	public PersonService personService() {
		System.out.println("在容器中添加了一个组件:peronService");
		return new PersonServiceImpl();
	}

	//将自定义的区域信息解析器以组件的形式添加到容器中
	@Bean
	public MyLocalResolver localeResolver(){
		return new MyLocalResolver();
	}


}
